home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 021-030 / amok28 / patchmrg / createport.i next >
Text File  |  1993-11-04  |  2KB  |  95 lines

  1. ; macros execsupport   May 89
  2. ; © Bernd Preusing, Gerhardstr. 16, D-2200 Elmshorn
  3.     include    exec/exec.i
  4.     IFND    _LVOPermit
  5.     include exec/exec_lib.i
  6.     ENDC
  7.  
  8. CALLSYS    MACRO ; läßt A6
  9.     jsr    _LVO\1(A6)
  10.     ENDM
  11.  
  12. CreatePort MACRO ; name, prio
  13.     IIF    NARG-2 fail
  14.     lea.l    \1,a0
  15.     move.b    \2,d0
  16.     bsr    CreaPort
  17.     IFND    CreatePortIs
  18. CreatePortIs SET 1
  19.     bra.s    cp\@
  20. CreaPort
  21.     movem.l    d2-d3/a2-a3/A6,-(A7)
  22.     move.l    a0,a2
  23.     move.b    d0,d2
  24.     moveq    #0,d0
  25.     move.l    d0,a3
  26.     moveq    #-1,d0
  27.     CALLEXEC AllocSignal
  28.     move.l    d0,d3
  29.     bmi.s    cp_nosig
  30.     moveq    #MP_SIZE,d0
  31.     move.l    #MEMF_PUBLIC|MEMF_CLEAR,d1
  32.     CALLSYS    AllocMem
  33.     move.l    d0,a3
  34.     tst.l    d0
  35.     bne.s    cp_memok
  36.     move.l    d3,d0
  37.     CALLSYS    FreeSignal
  38.     bra.s    cp_ret
  39. cp_memok:
  40.     move.l    a2,LN_NAME(a3)
  41.     move.b    d2,LN_PRI(a3)
  42.     move.b    #NT_MSGPORT,LN_TYPE(a3)
  43.     move.b    #PA_SIGNAL,MP_FLAGS(a3)
  44.     move.b    d3,MP_SIGBIT(a3)
  45.     movea.w    #0,a1
  46.     CALLSYS    FindTask
  47.     move.l    d0,MP_SIGTASK(a3)
  48.     move.l    a2,d0
  49.     beq.s    cp_noname
  50.     move.l    a3,a1
  51.     CALLSYS AddPort
  52.     bra.s    cp_ret
  53. cp_noname:
  54.     lea.l    MP_MSGLIST(a3),a0
  55.     NEWLIST    A0
  56. cp_nosig:
  57. cp_ret:
  58.     move.l    a3,d0
  59.     movem.l (a7)+,d2-d3/a2-a3/A6
  60.     rts
  61. cp\@
  62.     ENDC
  63.     ENDM
  64.  
  65. DeletePort MACRO ; port
  66.     IIF    NARG-1 FAIL
  67.     move.l    \1,a1
  68.     bsr    DelPort
  69.     IFND    DeletePortIs
  70. DeletePortIs SET 1
  71.     bra.s    dp\@
  72. DelPort:
  73.     movem.l    a2/a6,-(a7)
  74.     move.l    a1,a2
  75.     tst.l    LN_NAME(a2)
  76.     beq.s    dp_noname
  77.     CALLEXEC RemPort
  78. dp_noname:
  79.     moveq    #-1,d0
  80.     move.b    d0,LN_TYPE(a2)
  81.     move.l    d0,MP_MSGLIST(a2)
  82.     moveq    #0,d0
  83.     move.b    MP_SIGBIT(a2),d0
  84.     CALLEXEC FreeSignal
  85.     move.l    a2,a1
  86.     moveq    #MP_SIZE,d0
  87.     CALLSYS    FreeMem
  88.     movem.l    (a7)+,a2/a6
  89.     rts
  90. dp\@
  91.     ENDC
  92.     ENDM
  93.  
  94.  
  95.